// apply() 方法调用一个具有给定 this 值的函数， 以及以一个数组（ 或一个类数组对象） 的形式提供的参数。
Function.prototype.my_apply = function(context, args) {
	if (typeof this !== 'function') {
		throw new TypeError('error')
	}
	context = context || 'window'
	let fn = Symbol('fn')
	context[fn] = this //context.fn = this 
	const res = context[fn](...args)
	delete context[fn]
	return res
}
// Function.prototype.my_apply = function(obj, args) {
// 	// 非函数不能调用
// 	if (typeof this !== 'function') {
// 		throw new TypeError('error')
// 	}

// 	obj = obj || window
// 	const fn = Symbol('fn');

// 	obj[fn] = this
// 	const result = obj[fn](...args)
// 	delete obj[fn]
// 	return result
// }
var obj = {
	user: 'Ducky',
	fn: function(a, b) {
		console.log(a + b);
		console.log(this.user);
	}
}
var b = obj.fn;
console.log(typeof b);
b.my_apply(obj, [1, 2]);
// 3
// Ducky
